<?php
$email = 'contact@loto-keno.fr'; // Déclaration de l'adresse de destination.
function emailAdmin($mail, $sujet, $message) {
    $sujet = '[Loto-keno.fr] ' . trim($sujet);
    $headers = 'From: "loto-keno.fr"<' . $mail . '>' . "\n";
    $headers .='Reply-To: ' . $mail . "\n";
    $headers .='Content-Type: text/html; charset="iso-8859-1"' . "\n";
    $headers .='Content-Transfer-Encoding: 8bit';
    $message = '<html><head><title>Erreur cron update BDD</title></head><body>' . $message . '</body></html>';
    //mail($mail, $sujet, $message, $headers);
    echo '<hr>'.$message;
}

function recupZipKeno($fileDistant, $fileServeur, $ficherCsv, $email) {
    $message = '';
    // On récupère le fichier  zip distant
    if (!copy($fileDistant, $fileServeur)) {
        $message = '1. La copie du fichier "' . $fileDistant . '" a échoué le ' . date('d-m-Y à H:i:s') . '.<br />';
        //si cela ne marche pas on envoie un mail pour prévenir
        emailAdmin($email, 'Copie fichier distant fail', $message);
    } else {
        //pour le mail de fin
        $message .='-> Copie fichier distant "' . $fileDistant . '": OK<br />';

        //décompression du zip
        $zip = new ZipArchive();
        // On ouvre l’archive.
        $res = $zip->open($fileServeur);
        if ($res === TRUE) {
            //pour le mail de fin
            $message .='-> Lecture fichier ZIP "' . $fileServeur . '": OK<br />';
            $zip->extractTo('fichier/csv/');
            $zip->close();

            if (file_exists($ficherCsv)) {
                //pour le mail de fin
                $message .='-> Lecture fichier CSV "' . $ficherCsv . '": OK<br />';

                //on récupère le dernier tirage pour le comparer
                try {
                    if (in_array($_SERVER['HTTP_HOST'], array("127.0.0.1", "localhost"))) {
                        $bdd = new PDO('mysql:host=localhost;dbname=lotokenotirage', 'root', '');
                    } else {
                        $bdd = new PDO('mysql:host=mysql51-82.perso;dbname=lotokenotirage', 'lotokenotirage', 'yodtVfgl');
                    }
                } catch (Exception $e) {
                    die('Erreur : ' . $e->getMessage());
                }
                $reponse = $bdd->query('SELECT `id_fdj`,`date_de_tirage` FROM `keno` ORDER BY`id_fdj` DESC LIMIT 0,1');
                $donnees = $reponse->fetch();                

                $fic = fopen($ficherCsv, "a+");
                $first = $aucun = true;

                while ($tab = fgetcsv($fic, 2048, ';')) {
                    if ($first) {
                        $first = false;                       
                    } else {                        
                        if ($tab[0] > $donnees['id_fdj']) {
                            $champs = count($tab); //nombre de champ dans la ligne en question
                            $sql = 'INSERT INTO  `loto` (
                                `id_tirage` , `id_fdj` , `jour` , `date` , `date_forclusion` ,
                                `boule1` , `boule2` , `boule3` , `boule4` , `boule5` , `num_chance` , `combinaison` ,
                                `gagnant_1` , `rapport_1` , `gagnant_2` , `rapport_2` ,
                                `gagnant_3` , `rapport_3` , `gagnant_4` , `rapport_4` ,
                                `gagnant_5` , `rapport_5` , `gagnant_6` , `rapport_6` ,
                                `jokerplus` , `superloto`) VALUES ( NULL ';

                            //on va gérer chaque champs
                            for ($i = 0; $i < $champs - 1; $i++) {
                                switch ($i) {
//                                    //les dates pour les mettre en datetime
//                                    case 2:
//                                    case 3:
//                                        $sql .= ', \'' . date('Y-m-d', mktime(1, 0, 0, substr($tab[$i], 3, 2), substr($tab[$i], 0, 2), substr($tab[$i], 6, 4))) . '\'';
//                                        break;
//                                    //les rapport pour mettre le '.' du float
//                                    case 12:
//                                    case 14:
//                                    case 16:
//                                    case 18:
//                                    case 20:
//                                    case 22:
//                                        $sql .= ', \'' . str_replace(',', '.', $tab[$i]) . '\'';
//                                        break;
//                                    //la gestion du superloto
//                                    case 24:
//                                        $sql .= ', \'' . $superloto . '\'';
//                                        break;
                                    //pour tous les autres champs
                                    default :
                                        $sql .= ', \'' . trim($tab[$i]) . '\'';
                                }
                            }
                            $sql .=');';
                            try {
                                //$bdd->exec($sql);
                                echo $sql . '<br />';
                            } catch (PDOException $e) {
                                $message = '4. Insertion en base a échoué le ' . date('d-m-Y à H:i:s') . ' ' . $e->getMessage() . '<br />';
                                emailAdmin($email, 'Insertion base fail', $message);
                            }
                            //on insert en base

                            $aucun = false;
                            $message .='&nbsp;&nbsp;&nbsp;-> Insert BDD tirage du ' . $tab[1] . ' au ' . $tab[2] . ' : OK<br />';
                        }

                        //fermeture de la connexion
                        $reponse->closeCursor();
                    }
                }

                //si aucun ajout on le signal
                if ($aucun)
                    $message .='&nbsp;&nbsp;&nbsp;-> Aucune nouvelle entrée';

                //mail récapitulatif
                emailAdmin($email, 'Update ' . $ficherCsv . 'OK', $message);
            } else {
                $message = '2. La lecture du fichier "' . $ficherCsv . '" a échoué le ' . date('d-m-Y à H:i:s') . '.<br />';
                emailAdmin($email, 'Lecture fichier local fail', $message);
            }
        } else {
            $message = '3. La lecture du zip "' . $fileServeur . '" a échoué le ' . date('d-m-Y à H:i:s') . ' avec code err :' . $res . '.<br />';
            emailAdmin($email, 'Lecture fichier zip fail', $message);
        }
    }
}

function recupZip($fileDistant, $fileServeur, $ficherCsv, $superloto, $email) {
    $message = '';
    // On récupère le fichier  zip distant
    if (!copy($fileDistant, $fileServeur)) {
        $message = '1. La copie du fichier "' . $fileDistant . '" a échoué le ' . date('d-m-Y à H:i:s') . '.<br />';
        //si cela ne marche pas on envoie un mail pour prévenir
        emailAdmin($email, 'Copie fichier distant fail', $message);
    } else {
        //pour le mail de fin
        $message .='-> Copie fichier distant "' . $fileDistant . '": OK<br />';

        //décompression du zip
        $zip = new ZipArchive();
        // On ouvre l’archive.
        $res = $zip->open($fileServeur);
        if ($res === TRUE) {
            //pour le mail de fin
            $message .='-> Lecture fichier ZIP "' . $fileServeur . '": OK<br />';
            $zip->extractTo('fichier/csv/');
            $zip->close();

            if (file_exists($ficherCsv)) {
                //pour le mail de fin
                $message .='-> Lecture fichier CSV "' . $ficherCsv . '": OK<br />';

                //on récupère le dernier tirage pour le comparer
                try {
                    if (in_array($_SERVER['HTTP_HOST'], array("127.0.0.1", "localhost"))) {
                        $bdd = new PDO('mysql:host=localhost;dbname=lotokenotirage', 'root', '');
                    } else {
                        $bdd = new PDO('mysql:host=mysql51-82.perso;dbname=lotokenotirage', 'lotokenotirage', 'yodtVfgl');
                    }
                } catch (Exception $e) {
                    die('Erreur : ' . $e->getMessage());
                }
                $reponse = $bdd->query('SELECT `id_fdj`,`date` FROM `loto` WHERE `superloto`=' . $superloto . ' ORDER BY`id_fdj` DESC LIMIT 0,1');
                $donnees = $reponse->fetch();

                $fic = fopen($ficherCsv, "a+");
                $first = $aucun = true;

                while ($tab = fgetcsv($fic, 1024, ';')) {
                    if ($first) {
                        $first = false;
                    } else {
                        if ($tab[0] > $donnees['id_fdj']) {
                            $champs = count($tab); //nombre de champ dans la ligne en question
                            $sql = 'INSERT INTO  `loto` (
                                `id_tirage` , `id_fdj` , `jour` , `date` , `date_forclusion` ,
                                `boule1` , `boule2` , `boule3` , `boule4` , `boule5` , `num_chance` , `combinaison` ,
                                `gagnant_1` , `rapport_1` , `gagnant_2` , `rapport_2` ,
                                `gagnant_3` , `rapport_3` , `gagnant_4` , `rapport_4` ,
                                `gagnant_5` , `rapport_5` , `gagnant_6` , `rapport_6` ,
                                `jokerplus` , `superloto`) VALUES ( NULL ';

                            //on va gérer chaque champs
                            for ($i = 0; $i < $champs - 1; $i++) {
                                //on cherche à savoir si on a le dernier en base

                                switch ($i) {
                                    //les dates pour les mettre en datetime
                                    case 2:
                                    case 3:
                                        $sql .= ', \'' . date('Y-m-d', mktime(1, 0, 0, substr($tab[$i], 3, 2), substr($tab[$i], 0, 2), substr($tab[$i], 6, 4))) . '\'';
                                        break;
                                    //les rapport pour mettre le '.' du float
                                    case 12:
                                    case 14:
                                    case 16:
                                    case 18:
                                    case 20:
                                    case 22:
                                        $sql .= ', \'' . str_replace(',', '.', $tab[$i]) . '\'';
                                        break;
                                    //la gestion du superloto
                                    case 24:
                                        $sql .= ', \'' . $superloto . '\'';
                                        break;
                                    //pour tous les autres champs
                                    default :
                                        $sql .= ', \'' . trim($tab[$i]) . '\'';
                                }
                            }
                            $sql .=');';

                            //on inser en base
                            try {
                                $bdd->exec($sql);
                            } catch (PDOException $e) {
                                $message = '4. Insertion en base a échoué le ' . date('d-m-Y à H:i:s') . ' ' . $e->getMessage() . '<br />';
                                emailAdmin($email, 'Insertion base fail', $message);
                            }

                            $aucun = false;
                            $message .='&nbsp;&nbsp;&nbsp;-> Insert BDD tirage du ' . $tab[2] . ' : OK<br />';
                        }

                        //fermeture de la connexion
                        $reponse->closeCursor();
                    }
                }

                //si aucun ajout on le signal
                if ($aucun)
                    $message .='&nbsp;&nbsp;&nbsp;-> Aucune nouvelle entrée';

                //mail récapitulatif
                emailAdmin($email, 'Update ' . $ficherCsv . 'OK', $message);
            } else {
                $message = '2. La lecture du fichier "' . $ficherCsv . '" a échoué le ' . date('d-m-Y à H:i:s') . '.<br />';
                emailAdmin($email, 'Lecture fichier local fail', $message);
            }
        } else {
            $message = '3. La lecture du zip "' . $fileServeur . '" a échoué le ' . date('d-m-Y à H:i:s') . ' avec code err :' . $res . '.<br />';
            emailAdmin($email, 'Lecture fichier zip fail', $message);
        }
    }
}

?>